﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0061_DeleteDuplicates : IAlgorithm
    {
        // 82. 删除排序链表中的重复元素 II

        // 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除链表中所有存在数字重复情况的节点，只保留原始链表中 没有重复出现 的数字。

        // 返回同样按升序排列的结果链表。

        // 提示：
        //  链表中节点数目在范围[0, 300] 内
        //  -100 <= Node.val <= 100
        //  题目数据保证链表已经按升序排列

        public void Test()
        {
            // 算法参数定义
            var head = new ListNode(1)
            {
                next = new ListNode(1)
                {
                    next = new ListNode(2)
                    {
                        next = new ListNode(3)
                    }
                }
            };
            // 算法执行与打印
            var res = DeleteDuplicates(head);
            while (res != null)
            {
                Console.Write(res.val);
                res = res.next;
            }
        }

        // 算法
        public ListNode DeleteDuplicates(ListNode head)
        {
            if (head == null)
                return head;
            ListNode dummy = new ListNode(0, head);
            ListNode cur = dummy;
            while (cur.next != null && cur.next.next != null)
            {
                if (cur.next.val == cur.next.next.val)
                {
                    int x = cur.next.val;
                    while (cur.next != null && cur.next.val == x)
                        cur.next = cur.next.next;
                }
                else
                    cur = cur.next;
            }
            return dummy.next;
        }
    }
}
